home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus Special 25 / AMIGAplus Sonderheft 25 (2000)(Falke)(DE)(Track 1 of 4)[!].iso / Updates / HD-Installer / -WHDLoad- / WHDLoad_dev / patcher1.04.lha / Patcher1.04 / MAKECOMPARATIONTABLE2 next >
Text File  |  1997-05-01  |  12KB  |  637 lines

  1.  
  2. ;This program compares two files with the same length and makes a table
  3. ;of the differences between them. 
  4. ;Done by Egon.
  5.  
  6.  
  7.     INCDIR    ASM-ONE:INCLUDE2.0/
  8.  
  9.     INCLUDE LIBRARIES/DOS_LIB.I
  10.     INCLUDE    LIBRARIES/DOS.I
  11.     INCLUDE    LIBRARIES/DISKFONT_LIB.I
  12.     INCLUDE EXEC/EXEC_LIB.I
  13.     INCLUDE    EXEC/MEMORY.I
  14.     INCLUDE    GRAPHICS/GRAPHICS_LIB.I
  15.     INCLUDE INTUITION/INTUITION_LIB.I
  16.     INCLUDE INTUITION/INTUITION.I
  17.  
  18.     INCDIR    ASM-ONE:
  19.  
  20.  
  21. SIZETABLE = $2000        ;MAXIMALLY SIZE OF COMPARATIONTABLE (Longwords)
  22.  
  23. HP    ;BRA.S    HP
  24.     BASEREG    DOSBAS,A5
  25.     LEA.L    DOSBAS(PC),A5
  26.     MOVE.L    A0,DATABASE(A5)
  27.     MOVE.L    D0,DATALENGTH(A5)
  28.     MOVE.L    A7,OSSTACK(A5)
  29.     SUBQ.L    #1,A0
  30. .1    ADDQ.L    #1,A0
  31.     CMP.B    #$9,(A0)
  32.     BEQ.S    .1
  33.     CMP.B    #$20,(A0)
  34.     BEQ.S    .1
  35.     CMP.B    #$A,(A0)
  36.     BNE.S    .10
  37.     MOVEQ.L    #20,D0
  38.     RTS
  39.  
  40. .10    CMP.B    #'?',(A0)
  41.     BNE.S    .2
  42.     MOVE.L    (_SYSBASE).W,A6
  43.     LEA.L    DOSNAM(PC),A1
  44.     MOVEQ.L    #0,D0
  45.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  46.     TST.L    D0
  47.     BEQ.W    ERRGENERAL
  48.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  49.  
  50.     MOVE.L    DOSBAS(PC),A6
  51.     JSR    _LVOOUTPUT(A6)
  52.     TST.L    D0
  53.     BEQ.W    ERRGENERAL
  54.     MOVE.L    D0,OUTPUTBAS(A5)
  55.  
  56.     LEA.L    HELPSYNTAX(PC),A0
  57.     MOVEQ.L    #0,D3
  58.     MOVE.L    A0,D2
  59. .9    TST.B    (A0)+
  60.     BEQ.S    .8
  61.     ADDQ.L    #1,D3
  62.     BRA.S    .9
  63.  
  64. .8    MOVE.L    OUTPUTBAS(PC),D1
  65.     MOVE.L    DOSBAS(PC),A6
  66.     JSR    _LVOWRITE(A6)
  67.     LEA.L    $0.W,A0
  68.     BRA.W    ENDE
  69.  
  70. .2    LEA.L    LOCK1NAM(PC),A1
  71.     BSR.W    EXAMPARAM
  72.     TST.L    D3
  73.     BNE.S    .3
  74.     MOVEQ.L    #20,D0
  75.     RTS
  76.  
  77. .3    LEA.L    LOCK2NAM(PC),A1
  78.     BSR.W    EXAMPARAM
  79.     TST.L    D3
  80.     BNE.S    .4
  81.     MOVEQ.L    #20,D0
  82.     RTS
  83.  
  84. .4    TST.L    D0
  85.     BNE.S    .6
  86. .5    LEA.L    LOCK3NAM(PC),A1
  87.     BSR.W    EXAMPARAM
  88.     TST.L    D3
  89.     BNE.S    .7
  90. .6    ST    NOTSAVE(A5)
  91. .7
  92.  
  93. MAINPRG    MOVE.L    (_SYSBASE).W,A6
  94.     LEA.L    DOSNAM(PC),A1
  95.     MOVEQ.L    #0,D0
  96.     JSR    _LVOOpenLibrary(A6)    ;DOS öffnen
  97.     TST.L    D0
  98.     BEQ.W    ERRGENERAL
  99.     MOVE.L    D0,DOSBAS(A5)        ;Zeiger sichern
  100.  
  101.     MOVE.L    DOSBAS(PC),A6
  102.     JSR    _LVOOUTPUT(A6)
  103.     TST.L    D0
  104.     BEQ.W    ERRGENERAL
  105.     MOVE.L    D0,OUTPUTBAS(A5)
  106.  
  107.     LEA.L    WRITTEN(PC),A0
  108.     MOVEQ.L    #0,D3
  109.     MOVE.L    A0,D2
  110. .3    TST.B    (A0)+
  111.     BEQ.S    .2
  112.     ADDQ.L    #1,D3
  113.     BRA.S    .3
  114.  
  115. .2    MOVE.L    OUTPUTBAS(PC),D1
  116.     MOVE.L    DOSBAS(PC),A6
  117.     JSR    _LVOWRITE(A6)
  118.  
  119.     LEA.L    LOCK1NAM(PC),A1
  120.     MOVE.L    A1,D1
  121.     MOVE.L    #MODE_READWRITE,D2
  122.     MOVE.L    DOSBAS(PC),A6
  123.     JSR    _LVOLOCK(A6)
  124.     TST.L    D0
  125.     BEQ.W    ERRNOTEXIST
  126.     MOVE.L    D0,PARAM1LOCK(A5)
  127.     MOVE.L    PARAM1LOCK(PC),D1
  128.     MOVE.L    #PARAM1INFO,D2
  129.     MOVE.L    DOSBAS(PC),A6
  130.     JSR    _LVOEXAMINE(A6)
  131.     TST.L    D0
  132.     BEQ.W    ERRNOTEXIST
  133.     LEA.L    PARAM1INFO,A0
  134.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  135.     BNE.W    ERRNOFILE
  136.  
  137.     LEA.L    LOCK2NAM(PC),A1
  138.     MOVE.L    A1,D1
  139.     MOVE.L    #MODE_READWRITE,D2
  140.     MOVE.L    DOSBAS(PC),A6
  141.     JSR    _LVOLOCK(A6)
  142.     TST.L    D0
  143.     BEQ.W    ERRNOTEXIST
  144.     MOVE.L    D0,PARAM2LOCK(A5)
  145.     MOVE.L    PARAM2LOCK(PC),D1
  146.     MOVE.L    #PARAM2INFO,D2
  147.     MOVE.L    DOSBAS(PC),A6
  148.     JSR    _LVOEXAMINE(A6)
  149.     TST.L    D0
  150.     BEQ.W    ERRNOTEXIST
  151.     LEA.L    PARAM2INFO,A0
  152.     CMP.L    #-3,FIB_DIRENTRYTYPE(A0)
  153.     BNE.W    ERRNOFILE
  154.  
  155.     LEA.L    PARAM1INFO,A0
  156.     MOVE.L    FIB_SIZE(A0),D0
  157.     LEA.L    PARAM2INFO,A0
  158.     CMP.L    FIB_SIZE(A0),D0
  159.     BNE.W    ERROTHERLEN
  160.  
  161.     MOVE.L    D0,LENGTH(A5)
  162.     ADD.L    #$7,D0
  163.     AND.L    #$FFFF8,D0
  164.     MOVE.L    D0,A2
  165.     MOVE.L    #MEMF_CLEAR,D1
  166.     MOVE.L    (_SYSBASE).W,A6
  167.     JSR    _LVOALLOCMEM(A6)
  168.     TST.L    D0
  169.     BEQ.W    ERRNOTENMEM
  170.     MOVE.L    D0,MEM1BASE(A5)
  171.     MOVE.L    A2,D0
  172.     MOVE.L    #MEMF_CLEAR,D1
  173.     MOVE.L    (_SYSBASE).W,A6
  174.     JSR    _LVOALLOCMEM(A6)
  175.     TST.L    D0
  176.     BEQ.W    ERRNOTENMEM
  177.     MOVE.L    D0,MEM2BASE(A5)
  178.  
  179.     LEA.L    LOCK1NAM(PC),A1
  180.     MOVE.L    A1,D1
  181.     MOVE.L    #MODE_OLDFILE,D2
  182.     MOVE.L    DOSBAS(PC),A6
  183.     JSR    _LVOOPEN(A6)
  184.     TST.L    D0
  185.     BEQ.W    ERROPENFILE
  186.     MOVE.L    D0,FILHANDLE(A5)
  187.     MOVE.L    FILHANDLE(PC),D1
  188.     MOVE.L    MEM1BASE(PC),D2
  189.     LEA.L    PARAM1INFO,A0
  190.     MOVE.L    FIB_SIZE(A0),D3
  191.     MOVE.L    DOSBAS(PC),A6
  192.     JSR    _LVOREAD(A6)
  193.     TST.L    D0
  194.     BMI.W    ERRLOADFILE
  195.     BEQ.W    ERRLOADFILE
  196.     MOVE.L    FILHANDLE(PC),D1
  197.     MOVE.L    DOSBAS(PC),A6
  198.     JSR    _LVOCLOSE(A6)
  199.     CLR.L    FILHANDLE(A5)
  200.  
  201.     LEA.L    LOCK2NAM(PC),A1
  202.     MOVE.L    A1,D1
  203.     MOVE.L    #MODE_OLDFILE,D2
  204.     MOVE.L    DOSBAS(PC),A6
  205.     JSR    _LVOOPEN(A6)
  206.     TST.L    D0
  207.     BEQ.W    ERROPENFILE
  208.     MOVE.L    D0,FILHANDLE(A5)
  209.     MOVE.L    FILHANDLE(PC),D1
  210.     MOVE.L    MEM2BASE(PC),D2
  211.     LEA.L    PARAM2INFO,A0
  212.     MOVE.L    FIB_SIZE(A0),D3
  213.     MOVE.L    DOSBAS(PC),A6
  214.     JSR    _LVOREAD(A6)
  215.     TST.L    D0
  216.     BMI.W    ERRLOADFILE
  217.     BEQ.W    ERRLOADFILE
  218.     MOVE.L    FILHANDLE(PC),D1
  219.     MOVE.L    DOSBAS(PC),A6
  220.     JSR    _LVOCLOSE(A6)
  221.     CLR.L    FILHANDLE(A5)
  222.  
  223.     MOVE.L    PARAM1LOCK(PC),D1
  224.     MOVE.L    DOSBAS(PC),A6
  225.     JSR    _LVOUNLOCK(A6)
  226.     CLR.L    PARAM1LOCK(A5)
  227.     MOVE.L    PARAM2LOCK(PC),D1
  228.     MOVE.L    DOSBAS(PC),A6
  229.     JSR    _LVOUNLOCK(A6)
  230.     CLR.L    PARAM2LOCK(A5)
  231.  
  232.     MOVE.L    MEM1BASE(PC),A0        ;FILE1 ORIGINAL
  233.     MOVE.L    MEM2BASE(PC),A1
  234.     BSR.W    COMP
  235.     CMP.L    #-1,D0
  236.     BEQ.W    ERRTABTOOLONG
  237.     CMP.L    #4,D0
  238.     BEQ.W    NODIFF
  239.     MOVE.L    D0,D4
  240.  
  241.     TST.B    NOTSAVE(A5)
  242.     BNE.S    .1
  243.     LEA.L    LOCK3NAM(PC),A1
  244.     MOVE.L    A1,D1
  245.     MOVE.L    #MODE_NEWFILE,D2
  246.     MOVE.L    DOSBAS(PC),A6
  247.     JSR    _LVOOPEN(A6)
  248.     TST.L    D0
  249.     BEQ.W    ERRSAVEFILE
  250.     MOVE.L    D0,FILHANDLE(A5)
  251.     MOVE.L    FILHANDLE(PC),D1
  252.     LEA.L    COMPTAB,A0
  253.     MOVE.L    A0,D2
  254.     MOVE.L    D4,D3
  255.     MOVE.L    DOSBAS(PC),A6
  256.     JSR    _LVOWRITE(A6)
  257.     TST.L    D0
  258.     BMI.W    ERRSAVEFILE
  259.     BEQ.W    ERRSAVEFILE
  260.     MOVE.L    FILHANDLE(PC),D1
  261.     MOVE.L    DOSBAS(PC),A6
  262.     JSR    _LVOCLOSE(A6)
  263. .1    CLR.L    FILHANDLE(A5)
  264.  
  265. ALL_OK    LEA.L    NROK(PC),A0
  266.     MOVE.L    NUMBER(PC),D0
  267.     SWAP    D0
  268.     BSR.S    NEXTNUMBER
  269.     BSR.S    NEXTNUMBER
  270.     BSR.S    NEXTNUMBER
  271.     BSR.S    NEXTNUMBER
  272.     LEA.L    OKDISP(PC),A0
  273.     BRA.S    ENDE
  274.  
  275. NEXTNUMBER    CLR.W    D0
  276.     ROL.L    #4,D0
  277.     MOVE.B    .NR(PC,D0.W),D0
  278.     MOVE.B    D0,(A0)+
  279.     RTS
  280.  
  281. .NR    DC.B    '0123456789ABCDEF'
  282.     EVEN
  283.  
  284. NODIFF    LEA.L    NODIFFDISP(PC),A0
  285. ENDE    MOVEQ.L    #0,D0
  286.     BRA.S    ENDE1
  287.  
  288. ERRGENERAL    LEA.L    $0.W,A0
  289.     BRA.S    ERR
  290.  
  291. ERRSAVEFILE    LEA.L    ERRSAVEDISP(PC),A0
  292.     BRA.S    ERR
  293.  
  294. ERRNOTEXIST    LEA.L    NOTEXISTDISP(PC),A0
  295.     BRA.S    ERR
  296.  
  297. ERRNOFILE    LEA.L    NOFILEDISP(PC),A0
  298.     BRA.S    ERR
  299.  
  300. ERROTHERLEN    LEA.L    OTHERLENDISP(PC),A0
  301.     BRA.S    ERR
  302.  
  303. ERRNOTENMEM    LEA.L    NOTENMEMDISP(PC),A0
  304.     BRA.S    ERR
  305.  
  306. ERROPENFILE    LEA.L    ERROPENDISP(PC),A0
  307.     BRA.S    ERR
  308.  
  309. ERRLOADFILE    LEA.L    ERRLOADDISP(PC),A0
  310.     BRA.S    ERR
  311.  
  312. ERRTABTOOLONG    MOVE.L    MEM1BASE(PC),A0
  313.     MOVE.L    MEM2BASE(PC),A1
  314.     MOVEQ.L    #0,D0
  315.     MOVEQ.L    #0,D1
  316. .2    CMPM.B    (A0)+,(A1)+
  317.     BEQ.S    .1
  318.     ADDQ.L    #1,D1
  319. .1    ADDQ.L    #1,D0
  320.     CMP.L    LENGTH(PC),D0
  321.     BLO.S    .2
  322.     MOVE.L    D1,D0
  323.     LEA.L    NRBIG(PC),A0
  324.     BSR.S    NEXTNUMBER
  325.     BSR.S    NEXTNUMBER
  326.     BSR.S    NEXTNUMBER
  327.     BSR.S    NEXTNUMBER
  328.     MOVE.L    D1,D0
  329.     SWAP    D0
  330.     BSR.W    NEXTNUMBER
  331.     BSR.W    NEXTNUMBER
  332.     BSR.W    NEXTNUMBER
  333.     BSR.W    NEXTNUMBER
  334.     LEA.L    NOTSAVEDISP(PC),A0
  335. ERR    MOVE.L    OSSTACK(PC),A7
  336.     MOVEQ.L    #20,D0
  337.  
  338. ENDE1
  339.     MOVE.L    D0,-(A7)
  340.     CMP.L    #0,A0
  341.     BEQ.S    .1
  342.     MOVEQ.L    #0,D3
  343.     MOVE.L    A0,D2
  344. .3    TST.B    (A0)+
  345.     BEQ.S    .2
  346.     ADDQ.L    #1,D3
  347.     BRA.S    .3
  348.  
  349. .2    MOVE.L    OUTPUTBAS(PC),D1
  350.     MOVE.L    DOSBAS(PC),A6
  351.     JSR    _LVOWRITE(A6)
  352.  
  353. .1    TST.L    FILHANDLE(A5)
  354.     BEQ.S    .9
  355.     MOVE.L    FILHANDLE(PC),D1
  356.     MOVE.L    DOSBAS(PC),A6
  357.     JSR    _LVOCLOSE(A6)
  358.  
  359. .9    TST.L    PARAM1LOCK(A5)
  360.     BEQ.S    .5
  361.     MOVE.L    PARAM1LOCK(PC),D1
  362.     MOVE.L    DOSBAS(PC),A6
  363.     JSR    _LVOUNLOCK(A6)
  364.  
  365. .5    TST.L    PARAM2LOCK(A5)
  366.     BEQ.S    .4
  367.     MOVE.L    PARAM2LOCK(PC),D1
  368.     MOVE.L    DOSBAS(PC),A6
  369.     JSR    _LVOUNLOCK(A6)
  370.  
  371. .4    MOVE.L    LENGTH(PC),D0
  372.     ADD.L    #$7,D0
  373.     AND.L    #$FFFF8,D0
  374.     MOVE.L    D0,A2
  375.     TST.L    MEM1BASE(A5)
  376.     BEQ.S    .8
  377.     MOVE.L    MEM1BASE(PC),A1
  378.     MOVE.L    (_SYSBASE).W,A6
  379.     JSR    _LVOFREEMEM(A6)
  380. .8    TST.L    MEM2BASE(A5)
  381.     BEQ.S    .7
  382.     MOVE.L    A2,D0
  383.     MOVE.L    MEM2BASE(PC),A1
  384.     MOVE.L    (_SYSBASE).W,A6
  385.     JSR    _LVOFREEMEM(A6)
  386.  
  387. .7    TST.L    DOSBAS(A5)
  388.     BEQ.S    .6
  389.     MOVE.L    (_SYSBASE).W,A6
  390.     MOVE.L    DOSBAS(PC),A1
  391.     JSR    _LVOCLOSELIBRARY(A6)    ;DOS-Lib schliessen
  392.  
  393. .6    MOVE.L    (A7)+,D0
  394.     RTS
  395.  
  396. ;----------------------------------------------------------------------------
  397. EXAMPARAM    MOVEQ.L    #0,D3
  398.     SUBQ.L    #1,A0
  399. .4    ADDQ.L    #1,A0
  400.     CMP.B    #$9,(A0)
  401.     BEQ.S    .4
  402.     CMP.B    #$20,(A0)
  403.     BEQ.S    .4
  404.     CMP.B    #$A,(A0)
  405.     BEQ.S    .3
  406.     MOVEQ.L    #0,D2
  407.     CMP.B    #'"',(A0)
  408.     BNE.S    .6
  409.     ST    D2
  410.     ADDQ.L    #1,A0
  411. .6
  412. .1    MOVE.B    (A0)+,D1
  413.     CMP.B    #$9,D1
  414.     BEQ.S    .2
  415.     CMP.B    #$20,D1
  416.     BEQ.S    .2
  417.     CMP.B    #$A,D1
  418.     BEQ.S    .3
  419.     CMP.B    #'"',D1
  420.     BEQ.S    .5
  421.     MOVE.B    D1,(A1)+
  422.     ADDQ.L    #1,D3
  423.     BRA.S    .1
  424.  
  425. .2    TST.B    D2
  426.     BEQ.S    .7
  427.     MOVE.B    D1,(A1)+
  428.     ADDQ.L    #1,D3
  429.     BRA.S    .1
  430.  
  431. .5
  432. .7    MOVE.B    #$0,(A1)+
  433.     MOVEQ.L    #0,D0
  434.     RTS
  435.  
  436. .3    MOVE.B    #$0,(A1)+
  437.     MOVEQ.L    #-1,D0
  438.     RTS
  439.  
  440. *******************************************************************************
  441. ;A0: ORGPRG        ;ORIGINAL PROGRAM
  442. ;A1: MODPRG        ;MODIFIED PROGRAM
  443.  
  444. ;THE PROGRAM GIVES BACK THE LENGTH OF THE COMPARATION TABLE IN D0
  445. ;IF THE TABLE DEFINED IS NOT BIG ENOUGH, #$FFFFFFFF IS IN D0
  446. ;THE PROGRAM USES THE REGISTERS D0,D1 AND A0,A1,A2,A3
  447.  
  448.  
  449. COMP    CLR.L    NUMBER
  450.     LEA.L    COMPTAB,A2
  451.     MOVE.W    #SIZETABLE+$40-1,D0
  452. .7    CLR.L    (A2)+
  453.     DBF    D0,.7
  454.  
  455.     LEA.L    COMPTAB,A2
  456.     CLR.B    CMPCOUNT
  457.     MOVEQ.L    #0,D0
  458. .2    CMPM.B    (A0)+,(A1)+
  459.     BEQ.S    .1
  460.     ADD.L    #1,NUMBER
  461.     ADD.B    #1,CMPCOUNT
  462.     CMP.B    #1,CMPCOUNT
  463.     BNE.S    .4
  464.     OR.L    D0,(A2)+
  465.     MOVE.L    A2,A3        ;A3 POINTS AT THE LOCATION WHERE LATER THE
  466.                 ;LENGTH OF THE ACTUAL STRING IS
  467. .4    CMP.B    #2,CMPCOUNT
  468.     BNE.S    .6
  469.     OR.B    #$80,-3(A3)
  470.     MOVE.B    -1(A2),(A2)+
  471. .6    MOVE.B    -1(A1),(A2)+    ;WITH FILES, GET THE BYTE FROM THE